#ifndef SEISMICGRIDMODEL_H
#define SEISMICGRIDMODEL_H

#include <QAbstractTableModel>
#include <QStandardItemModel>

#include "seismicgrid.h"
#include "HierarchicalHeaderView.h"

class SeismicGridModel : public QAbstractTableModel
{
	Q_OBJECT
public:
	SeismicGridModel(SeismicGrid* pt_grid, QObject *parent = 0) ;

	// Obbligatorio per modello sola lettura
	int rowCount(const QModelIndex &parent = QModelIndex()) const;
	int columnCount(const QModelIndex &parent /*= QModelIndex()*/) const;
	QVariant data(const QModelIndex &index, int role) const;

	// Se si vuole usare l'header standard
	// QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;

	// Obbligatorio per modello resizeble. QModelIndex non serve nel caso di tabelle
	// bool insertRows(int position, int rows, const QModelIndex &parent=QModelIndex());
	// bool removeRows(int position, int rows, const QModelIndex &parent=QModelIndex());

	// Obbligatorio per modello editabile
	bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole);

    // Per aggiornare la vista quando il modello cambia (WhenExternalDataChange)
    void updateWEDChange(void);

private:
	SeismicGrid* m_pt_grid;

	QStandardItemModel m_horizontalHeaderModel;
	QStandardItemModel m_verticalHeaderModel;

	void fillHeaderModelHorizontal(QStandardItemModel& headerModel);
	void fillHeaderModelVertical(QStandardItemModel& headerModel);
};

#endif // SEISMICGRIDMODEL_H
